﻿using System;
using System.ComponentModel;
using System.Resources;

namespace Kyoh.Lib.Component.Globalization
{
    /// <summary>デザイナなどに表示するデフォルト値をリソースから取得します。</summary>
    [AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
    public sealed class DefaultValueFromResourceAttribute : DefaultValueAttribute
    {
        private ResourceManager resource;

        /// <summary><see cref="DefaultValueFromResourceAttribute"/> の新しいインスタンスを作成します。</summary>
        /// <param name="resourceSource">デフォルト値を取得するリソースの型。</param>
        /// <param name="value">リソースからデフォルト値を取得する際に使用する名前。</param>
        public DefaultValueFromResourceAttribute(Type resourceSource, string value) : base(value) { this.Init(resourceSource); }

        private void Init(Type resourceSource)
        {
            this.resource = new ResourceManager(resourceSource);
        }

        /// <summary>デフォルト値を取得します。</summary>
        public override object Value
        {
            get
            {
                return this.resource.GetObject(base.Value.ToString());
            }
        }

        private Guid instanceGuid = Guid.NewGuid();
        /// <summary>この <see cref="Attribute"/> の一意の識別子を取得します。</summary>
        public override object TypeId { get { return instanceGuid; } }
    }
}